home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Inne / Gry / GNU_Backgammon / gnubg-MAIN-20110822-setup.exe / {app} / gnubg.sql < prev    next >
Text File  |  2008-02-17  |  13KB  |  324 lines

  1. --
  2. -- gnubg.sql
  3. --
  4. -- by Joern Thyssen <jth@gnubg.org>, 2004.
  5. --
  6. -- This program is free software; you can redistribute it and/or modify
  7. -- it under the terms of version 3 or later of the GNU General Public License as
  8. -- published by the Free Software Foundation.
  9. --
  10. -- This program is distributed in the hope that it will be useful,
  11. -- but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. -- GNU General Public License for more details.
  14. --
  15. -- You should have received a copy of the GNU General Public License
  16. -- along with this program; if not, write to the Free Software
  17. -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18. --
  19. -- $Id: gnubg.sql,v 1.13 2008/02/17 12:26:24 c_anthon Exp $
  20. --
  21.  
  22. -- Table: control
  23. -- Holds the most current value of xxx_id for every table.
  24.  
  25. CREATE TABLE control (
  26.     tablename     CHAR(80) NOT NULL
  27.    ,next_id       INTEGER NOT NULL
  28.    ,PRIMARY KEY (tablename)
  29. );
  30.  
  31. CREATE UNIQUE INDEX icontrol ON control (
  32.     tablename
  33. );
  34.  
  35. -- Table: player
  36. -- a player
  37.  
  38. CREATE TABLE player (
  39.    player_id INTEGER NOT NULL
  40.    -- Name of player
  41.    ,name          CHAR(80) NOT NULL
  42.    -- Misc notes about this player
  43.    ,notes         VARCHAR(1000) NOT NULL
  44.    ,PRIMARY KEY (player_id)
  45. );
  46.  
  47. CREATE UNIQUE INDEX iplayer ON player (
  48.     player_id
  49. );
  50.  
  51. -- Table: session
  52.  
  53. CREATE TABLE session (
  54.     session_id        INTEGER NOT NULL
  55.    ,checksum        CHAR(33) NOT NULL
  56.    -- Player 0
  57.    ,player_id0      INTEGER NOT NULL 
  58.    -- Player 1
  59.    ,player_id1      INTEGER NOT NULL 
  60.    -- The result of the match/session:
  61.    -- - the total number of points won or lost
  62.    -- - +1/0/-1 for player 0 won the match, match not complete, and
  63.    --   player 1 won match, respectively
  64.    ,result          INTEGER NOT NULL
  65.    -- Length of match
  66.    -- 0=session, >0=match
  67.    ,length          INTEGER NOT NULL
  68.    -- Timestamp for insert into database
  69.    ,added           TIMESTAMP NOT NULL
  70.    -- Match info
  71.    ,rating0         CHAR(80) NOT NULL
  72.    ,rating1         CHAR(80) NOT NULL
  73.    ,event           CHAR(80) NOT NULL
  74.    ,round           CHAR(80) NOT NULL
  75.    ,place           CHAR(80) NOT NULL
  76.    ,annotator       CHAR(80) NOT NULL
  77.    ,comment         CHAR(80) NOT NULL
  78.    ,date            DATE 
  79.    ,PRIMARY KEY (session_id)
  80.    ,FOREIGN KEY (player_id0) REFERENCES player (player_id)
  81.       ON DELETE RESTRICT
  82.    ,FOREIGN KEY (player_id1) REFERENCES player (player_id)
  83.       ON DELETE RESTRICT
  84. );
  85.  
  86. CREATE UNIQUE INDEX isession ON session (
  87.     session_id
  88. );
  89.  
  90. -- Table: statistics
  91. -- Used from session and game tables to store match and game statistics,
  92. -- respectively.
  93.  
  94. CREATE TABLE matchstat (
  95.     matchstat_id        INTEGER NOT NULL
  96.    -- session identification
  97.    ,session_id                          INTEGER NOT NULL
  98.    -- player identification
  99.    ,player_id                         INTEGER NOT NULL
  100.    -- chequerplay statistics
  101.    ,total_moves                       INTEGER NOT NULL 
  102.    ,unforced_moves                    INTEGER NOT NULL
  103.    ,unmarked_moves                    INTEGER NOT NULL
  104.    ,good_moves                        INTEGER NOT NULL
  105.    ,doubtful_moves                    INTEGER NOT NULL
  106.    ,bad_moves                         INTEGER NOT NULL
  107.    ,very_bad_moves                    INTEGER NOT NULL
  108.    ,chequer_error_total_normalised    FLOAT   NOT NULL
  109.    ,chequer_error_total               FLOAT   NOT NULL
  110.    ,chequer_error_per_move_normalised FLOAT   NOT NULL
  111.    ,chequer_error_per_move            FLOAT   NOT NULL
  112.    ,chequer_rating                    INTEGER NOT NULL
  113.    -- luck statistics
  114.    ,very_lucky_rolls                  INTEGER NOT NULL
  115.    ,lucky_rolls                       INTEGER NOT NULL
  116.    ,unmarked_rolls                    INTEGER NOT NULL
  117.    ,unlucky_rolls                     INTEGER NOT NULL
  118.    ,very_unlucky_rolls                INTEGER NOT NULL
  119.    ,luck_total_normalised             FLOAT   NOT NULL
  120.    ,luck_total                        FLOAT   NOT NULL
  121.    ,luck_per_move_normalised          FLOAT   NOT NULL
  122.    ,luck_per_move                     FLOAT   NOT NULL
  123.    ,luck_rating                       INTEGER NOT NULL
  124.    -- cube statistics
  125.    ,total_cube_decisions              INTEGER NOT NULL
  126.    ,close_cube_decisions              INTEGER NOT NULL
  127.    ,doubles                           INTEGER NOT NULL
  128.    ,takes                             INTEGER NOT NULL
  129.    ,passes                            INTEGER NOT NULL
  130.    ,missed_doubles_below_cp           INTEGER NOT NULL
  131.    ,missed_doubles_above_cp           INTEGER NOT NULL
  132.    ,wrong_doubles_below_dp            INTEGER NOT NULL
  133.    ,wrong_doubles_above_tg            INTEGER NOT NULL
  134.    ,wrong_takes                       INTEGER NOT NULL
  135.    ,wrong_passes                      INTEGER NOT NULL
  136.    ,error_missed_doubles_below_cp_normalised     FLOAT   NOT NULL
  137.    ,error_missed_doubles_above_cp_normalised     FLOAT   NOT NULL
  138.    ,error_wrong_doubles_below_dp_normalised      FLOAT   NOT NULL
  139.    ,error_wrong_doubles_above_tg_normalised      FLOAT   NOT NULL
  140.    ,error_wrong_takes_normalised                 FLOAT   NOT NULL
  141.    ,error_wrong_passes_normalised                FLOAT   NOT NULL
  142.    ,error_missed_doubles_below_cp     FLOAT   NOT NULL
  143.    ,error_missed_doubles_above_cp     FLOAT   NOT NULL
  144.    ,error_wrong_doubles_below_dp      FLOAT   NOT NULL
  145.    ,error_wrong_doubles_above_tg      FLOAT   NOT NULL
  146.    ,error_wrong_takes                 FLOAT   NOT NULL
  147.    ,error_wrong_passes                FLOAT   NOT NULL
  148.    ,cube_error_total_normalised       FLOAT   NOT NULL
  149.    ,cube_error_total                  FLOAT   NOT NULL
  150.    ,cube_error_per_move_normalised    FLOAT   NOT NULL
  151.    ,cube_error_per_move               FLOAT   NOT NULL
  152.    ,cube_rating                       INTEGER NOT NULL
  153.    -- overall statistics
  154.    ,overall_error_total_normalised    FLOAT   NOT NULL
  155.    ,overall_error_total               FLOAT   NOT NULL
  156.    ,overall_error_per_move_normalised FLOAT   NOT NULL
  157.    ,overall_error_per_move            FLOAT   NOT NULL
  158.    ,overall_rating                    INTEGER NOT NULL
  159.    ,actual_result                     FLOAT   NOT NULL
  160.    ,luck_adjusted_result              FLOAT   NOT NULL
  161.    ,snowie_moves                      INTEGER NOT NULL
  162.    ,snowie_error_rate_per_move        FLOAT   NOT NULL
  163.    -- for matches only
  164.    ,luck_based_fibs_rating_diff       FLOAT           
  165.    ,error_based_fibs_rating           FLOAT           
  166.    ,chequer_rating_loss               FLOAT           
  167.    ,cube_rating_loss                  FLOAT           
  168.    -- for money sesisons only
  169.    ,actual_advantage                  FLOAT           
  170.    ,actual_advantage_ci               FLOAT           
  171.    ,luck_adjusted_advantage           FLOAT           
  172.    ,luck_adjusted_advantage_ci        FLOAT           
  173.    -- time penalties
  174.    ,time_penalties                    INTEGER NOT NULL
  175.    ,time_penalty_loss_normalised      FLOAT   NOT NULL
  176.    ,time_penalty_loss                 FLOAT   NOT NULL
  177.    -- 
  178.    ,PRIMARY KEY (matchstat_id)
  179.    ,FOREIGN KEY (player_id) REFERENCES player (player_id)
  180.       ON DELETE RESTRICT
  181.    ,FOREIGN KEY (session_id) REFERENCES session (session_id)
  182.       ON DELETE CASCADE
  183. );
  184.  
  185. CREATE UNIQUE INDEX ismatchstat ON matchstat (
  186.     matchstat_id
  187. );
  188.  
  189.  
  190. -- Table: game
  191.  
  192. CREATE TABLE game (
  193.     game_id         INTEGER NOT NULL
  194.    ,session_id        INTEGER NOT NULL
  195.    -- Player 0
  196.    ,player_id0      INTEGER NOT NULL 
  197.    -- Player 1
  198.    ,player_id1      INTEGER NOT NULL 
  199.    -- score at start of game (since end of game is not meaningful if incomplete)
  200.    ,score_0       INTEGER NOT NULL
  201.    ,score_1       INTEGER NOT NULL
  202.    -- The result of the game
  203.    -- the total number of points won or lost
  204.    -- positive means player 0 won game, negative player 1 won game, 
  205.    -- zero - game not complete
  206.    ,result          INTEGER NOT NULL
  207.    -- Timestamp for insert into database
  208.    ,added           TIMESTAMP NOT NULL
  209.    -- which game in the match/session this is
  210.    ,game_number     INTEGER NOT NULL
  211.    -- if Crawford game
  212.    ,crawford        INTEGER NOT NULL
  213.    ,PRIMARY KEY (game_id)
  214.    ,FOREIGN KEY (session_id) REFERENCES session (session_id)
  215.       ON DELETE CASCADE
  216.    ,FOREIGN KEY (player_id0) REFERENCES player (player_id)
  217.       ON DELETE RESTRICT
  218.    ,FOREIGN KEY (player_id1) REFERENCES player (player_id)
  219.       ON DELETE RESTRICT
  220. );
  221.  
  222. CREATE UNIQUE INDEX igame ON game (
  223.     game_id
  224. );
  225.  
  226. -- Table: statistics
  227. -- Used from match and game tables to store match and game statistics,
  228. -- respectively.
  229.  
  230. CREATE TABLE gamestat (
  231.     gamestat_id                      INTEGER NOT NULL
  232.    -- game identification
  233.    ,game_id                          INTEGER NOT NULL
  234.    -- player identification
  235.    ,player_id                         INTEGER NOT NULL
  236.    -- chequerplay statistics
  237.    ,total_moves                       INTEGER NOT NULL 
  238.    ,unforced_moves                    INTEGER NOT NULL
  239.    ,unmarked_moves                    INTEGER NOT NULL
  240.    ,good_moves                        INTEGER NOT NULL
  241.    ,doubtful_moves                    INTEGER NOT NULL
  242.    ,bad_moves                         INTEGER NOT NULL
  243.    ,very_bad_moves                    INTEGER NOT NULL
  244.    ,chequer_error_total_normalised    FLOAT   NOT NULL
  245.    ,chequer_error_total               FLOAT   NOT NULL
  246.    ,chequer_error_per_move_normalised FLOAT   NOT NULL
  247.    ,chequer_error_per_move            FLOAT   NOT NULL
  248.    ,chequer_rating                    INTEGER NOT NULL
  249.    -- luck statistics
  250.    ,very_lucky_rolls                  INTEGER NOT NULL
  251.    ,lucky_rolls                       INTEGER NOT NULL
  252.    ,unmarked_rolls                    INTEGER NOT NULL
  253.    ,unlucky_rolls                     INTEGER NOT NULL
  254.    ,very_unlucky_rolls                INTEGER NOT NULL
  255.    ,luck_total_normalised             FLOAT   NOT NULL
  256.    ,luck_total                        FLOAT   NOT NULL
  257.    ,luck_per_move_normalised          FLOAT   NOT NULL
  258.    ,luck_per_move                     FLOAT   NOT NULL
  259.    ,luck_rating                       INTEGER NOT NULL
  260.    -- cube statistics
  261.    ,total_cube_decisions              INTEGER NOT NULL
  262.    ,close_cube_decisions              INTEGER NOT NULL
  263.    ,doubles                           INTEGER NOT NULL
  264.    ,takes                             INTEGER NOT NULL
  265.    ,passes                            INTEGER NOT NULL
  266.    ,missed_doubles_below_cp           INTEGER NOT NULL
  267.    ,missed_doubles_above_cp           INTEGER NOT NULL
  268.    ,wrong_doubles_below_dp            INTEGER NOT NULL
  269.    ,wrong_doubles_above_tg            INTEGER NOT NULL
  270.    ,wrong_takes                       INTEGER NOT NULL
  271.    ,wrong_passes                      INTEGER NOT NULL
  272.    ,error_missed_doubles_below_cp_normalised     FLOAT   NOT NULL
  273.    ,error_missed_doubles_above_cp_normalised     FLOAT   NOT NULL
  274.    ,error_wrong_doubles_below_dp_normalised      FLOAT   NOT NULL
  275.    ,error_wrong_doubles_above_tg_normalised      FLOAT   NOT NULL
  276.    ,error_wrong_takes_normalised                 FLOAT   NOT NULL
  277.    ,error_wrong_passes_normalised                FLOAT   NOT NULL
  278.    ,error_missed_doubles_below_cp     FLOAT   NOT NULL
  279.    ,error_missed_doubles_above_cp     FLOAT   NOT NULL
  280.    ,error_wrong_doubles_below_dp      FLOAT   NOT NULL
  281.    ,error_wrong_doubles_above_tg      FLOAT   NOT NULL
  282.    ,error_wrong_takes                 FLOAT   NOT NULL
  283.    ,error_wrong_passes                FLOAT   NOT NULL
  284.    ,cube_error_total_normalised       FLOAT   NOT NULL
  285.    ,cube_error_total                  FLOAT   NOT NULL
  286.    ,cube_error_per_move_normalised    FLOAT   NOT NULL
  287.    ,cube_error_per_move               FLOAT   NOT NULL
  288.    ,cube_rating                       INTEGER NOT NULL
  289.    -- overall statistics
  290.    ,overall_error_total_normalised    FLOAT   NOT NULL
  291.    ,overall_error_total               FLOAT   NOT NULL
  292.    ,overall_error_per_move_normalised FLOAT   NOT NULL
  293.    ,overall_error_per_move            FLOAT   NOT NULL
  294.    ,overall_rating                    INTEGER NOT NULL
  295.    ,actual_result                     FLOAT   NOT NULL
  296.    ,luck_adjusted_result              FLOAT   NOT NULL
  297.    ,snowie_moves                      INTEGER NOT NULL
  298.    ,snowie_error_rate_per_move        FLOAT   NOT NULL
  299.    -- for matches only
  300.    ,luck_based_fibs_rating_diff       FLOAT           
  301.    ,error_based_fibs_rating           FLOAT           
  302.    ,chequer_rating_loss               FLOAT           
  303.    ,cube_rating_loss                  FLOAT           
  304.    -- for money sesisons only
  305.    ,actual_advantage                  FLOAT           
  306.    ,actual_advantage_ci               FLOAT           
  307.    ,luck_adjusted_advantage           FLOAT           
  308.    ,luck_adjusted_advantage_ci        FLOAT           
  309.    -- time penalties
  310.    ,time_penalties                    INTEGER NOT NULL
  311.    ,time_penalty_loss_normalised      FLOAT   NOT NULL
  312.    ,time_penalty_loss                 FLOAT   NOT NULL
  313.    -- 
  314.    ,PRIMARY KEY (gamestat_id)
  315.    ,FOREIGN KEY (player_id) REFERENCES player (player_id)
  316.       ON DELETE RESTRICT
  317.    ,FOREIGN KEY (game_id) REFERENCES game (game_id)
  318.       ON DELETE CASCADE
  319. );
  320.  
  321. CREATE UNIQUE INDEX isgamestat ON gamestat (
  322.     gamestat_id
  323. );
  324.